// bzoj1106
// 题意：给定2*n个数，保证每个数都恰好出现两次（成n对），现在这些数排成
//       一排，每次你可以的操作是交换一对任意位置的相邻两个数，如果交换后
//       有两个相同的数相邻，那么它们会消失，然后如果还有相邻相同的数，
//       就会一直消除。问要将所有数都消除的最少操作次数是多少。
//
// 题解：有点向括号匹配。从头往后，如果前面没有和匹配的就把这个位置+1, 
//       如果当前数前面有和他匹配的，那么要把他们消除的费用至少是他们
//       之间1的个数，答案加上这么多，然后把这两个数置0。可以用树状数组
//       来做。
//
// run: $exec < input
#include <cstdio>

int const maxn = 50007;
int tree[2 * maxn];
int pos[maxn];
int n;

int lowbit(int x) { return x & -x; }

void update(int id, int d)
{
	for (; id <= 2 * n; id += lowbit(id))
		tree[id] += d;
}

int get_sum(int id)
{
	int ret = 0;
	for (; id > 0; id -= lowbit(id))
		ret += tree[id];
	return ret;
}

int main()
{
	scanf("%d", &n);
	long long ans = 0;
	for (int i = 1, x; i <= 2 * n; i++) {
		scanf("%d", &x);
		if (pos[x]) {
			int len = get_sum(i - 1) - get_sum(pos[x]);
			ans += len;
			update(pos[x], -1);
		} else {
			pos[x] = i;
			update(i, 1);
		}
	}
	printf("%lld\n", ans);
}

